今天打了疫苗,實在太不舒服了
只好來變成分享今天查到的關於AppDelegate整理
先來介紹AppDelegate的生命週期事件與SceneDelegate的相關
// iOS 13以前的AppDelegate
// 現在沒有
func applicationWillResignActive(_ application: UIApplication) {
//即將變成非活動狀態
// WillResignActive 將會取消活動
}
func applicationDidEnterBackground(_ application: UIApplication) {
//已進入後台
}
func applicationWillEnterForeground(_ application: UIApplication) {
//即將進入前台
}
func applicationDidBecomeActive(_ application: UIApplication) {
//已進入前台,成为活躍進程
}
func applicationWillTerminate(_ application: UIApplication) {
//進程终止
}
// 現在還有,原本上面的部分被SceneDelegate取代
// 初始化數據庫,啟動必要服務,註冊通知工作,創建UIWindow
// 執行UIWindow的MakeKeyAndVisible方法,將頁面顯示螢幕上
// AppDelegate中,didFinishLaunchingWithOptions僅負責處理除了UI之外的初始化工作:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
return true
}
// 現在iOS 13 之後新增的 在AppDelegate內用來管例SceneDelegate的
// 新建場景,返回場景配置
//系统將調用configurationForConnecting接口,返回UISceneConfiguration對象,創建scene。
func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
}
// 現在iOS 13 之後新增的 在AppDelegate內用來管例SceneDelegate的
//新建場景,返回場景配置
func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
}
//場景關閉時調用
func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) {
}
UIApplicationDelegate不再負責UI的生命週期,負責僅是APP的生命週期,包括啟動和中止。
// 新建窗口時調用
// 通過app switcher關閉該窗口時調用,至此窗口生命结束。
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions){
guard let _ = (scene as? UIWindowScene) else { return }
}
func sceneDidDisconnect(_ scene: UIScene){}
func sceneDidBecomeActive(_ scene: UIScene){}
func sceneWillResignActive(_ scene: UIScene){}
func sceneWillEnterForeground(_ scene: UIScene){}
func sceneDidEnterBackground(_ scene: UIScene){}
// WillConnectTo & sceneDidDisconnect以控制場景的新建和關閉。
UISceneSession是管理scene的實例,一个scene對應一個UISceneSession
UISceneSession包含唯一標示和場景的配置細節。
參考連結:
Scene Delegate vs. App Delegate Explained
https://easeapi.com/blog/blog/97-ios13-scene-delegate.html